#ifndef _atomic_0822_signal_preprocessing_service_H_
#define _atomic_0822_signal_preprocessing_service_H_

/*------------------------ Include Begin --------------------------*/

// C
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string>
#include <math.h>
#include <time.h>
#include <ctype.h>

// C++
#include <iostream>
#include <fstream>
#include <chrono>
#include <string>
#include <random>
#include <cmath>
#include <vector>
#include <map>
#include <set>
#include <chrono>
#include <mutex>
#include <sstream>

/*------------------------  Include End  -------------------------*/

/*------------------------  Service Info Begin  --------------------------*/
/**
 *
 * @name:    atomic_0822_signal_preprocessing_service
 * @chinese_name: 信号处理服务
 * @description: 信号处理服务
 * @version: V1.0.0
 * @build_time: 2025-08-22T09-21-21
 * @license: MIT
 * @service_path: /atomic_0822_signal_preprocessing_service
 *
 * @resource_requirement:
 *         + cpu_architecture: x86_64
 *         + memory: 4GB
 *         + hard_disk: 50GB
 *
 *@developer:
 *      +name: twilight
 *      +email: twilight@atomic_service_fwgz.com
 *@maintainer:
 *      +name:twilight
 *      +email:twilight@PNUI.com
 *@operating_system:
 *      +name:Linux
 *      +v1:5.13.0-117-generic
 *      +v2:5.14.0-117-generic
 *      +name:SylixOS
 *      +v1:1.0.0
 *      +v2:1.0.2
 *
 *
 *
 */
/*------------------------  Service Info End  --------------------------*/

/*------------------------  Return Type Begin  --------------------------*/

#define ATOMIC_SERVICE_SUCCESS 0
#define ATOMIC_SERVICE_FAIL -1
#define ATOMIC_SERVICE_TIMEOUT -2
#define ATOMIC_SERVICE_ERROR -3
#define ATOMIC_SERVICE_NOT_SUPPORT -4
#define ATOMIC_SERVICE_NOT_READY -5
#define ATOMIC_SERVICE_NOT_INIT -6
#define ATOMIC_SERVICE_NOT_START -7
#define ATOMIC_SERVICE_NOT_STOP -8
#define ATOMIC_SERVICE_NOT_RELEASE -9
#define ATOMIC_SERVICE_NOT_DESTROY -10
#define ATOMIC_SERVICE_NOT_CREATE -11
#define ATOMIC_SERVICE_NOT_OPEN -12
#define ATOMIC_SERVICE_NOT_CLOSE -13
#define ATOMIC_SERVICE_NOT_READ -14
#define ATOMIC_SERVICE_NOT_WRITE -15
#define ATOMIC_SERVICE_NOT_SEEK -16
#define ATOMIC_SERVICE_NOT_TELL -17
#define ATOMIC_SERVICE_NOT_SIZE -18
#define ATOMIC_SERVICE_NOT_SEEK_END -19
#define ATOMIC_SERVICE_NOT_SEEK_SET -20
#define ATOMIC_SERVICE_NOT_SEEK_CUR -21
#define ATOMIC_SERVICE_NOT_SEEK_ABS -22

/*------------------------  Return Type End  --------------------------*/

/*------------------------  Message Info Begin  --------------------------*/


// 信号类型常量（用注释代替枚举）
// 0: 未知信号
// 1: 温度信号
// 2: 湿度信号
// 3: 压力信号
// 4: 振动信号

// 预处理算法类型常量（用注释代替枚举）
// 0: 不处理
// 1: 滑动平均滤波
// 2: 中值滤波
// 3: 限幅滤波
// 4: 归一化处理

// 预处理输入参数（仅使用基本数据类型）
typedef struct {
    int device_id;             // 设备ID
    int signal_type;           // 信号类型（0-4，见上方注释）
    int algo_type;             // 预处理算法类型（0-4，见上方注释）
    double raw_val1;           // 原始数据值1
    double raw_val2;           // 原始数据值2
    double raw_val3;           // 原始数据值3
    int valid_count;           // 有效数据数量
    int window_size;           // 滤波窗口大小（仅滤波算法用）
    double min_threshold;      // 最小值阈值（限幅/归一化用）
    double max_threshold;      // 最大值阈值（限幅/归一化用）
    int real_time_mode;       // 是否实时处理模式
} PreprocessInput;

// 预处理输出结果（仅使用基本数据类型）
typedef struct {
    int device_id;             // 设备ID
    int signal_type;           // 信号类型（0-4，见上方注释）
    double timestamp;          // 处理时间戳(ms)，已从uint64_t改为double
    double processed_val1;     // 处理后数据值1
    double processed_val2;     // 处理后数据值2
    double processed_val3;     // 处理后数据值3
    int valid_count;           // 有效处理结果数量
    int quality_score;         // 数据质量评分(0-100)
    int is_filtered;          // 是否经过滤波处理
    int return_type;           // 返回状态类型
} PreprocessOutput;

// 预处理服务状态信息
typedef struct {
    int code;                  // 状态码
    std::string status;        // 状态信息
    int total_processed;       // 总处理数据量
    int error_count;           // 错误计数
    int return_type;           // 返回类型
} PreprocessStatus;

/*------------------------  Message Info End  --------------------------*/

// 全局状态变量
static int g_total_processed = 0;       // 总处理数据量
static int g_error_count = 0;           // 错误计数
static int g_supported_devices[32] = {0}; // 支持的设备ID列表
static int g_device_count = 0;          // 支持的设备数量

// 信号类型常量定义（与头文件注释对应）
#define SIGNAL_TYPE_UNKNOWN 0    // 未知信号
#define SIGNAL_TYPE_TEMP 1       // 温度信号
#define SIGNAL_TYPE_HUMIDITY 2   // 湿度信号
#define SIGNAL_TYPE_PRESSURE 3   // 压力信号
#define SIGNAL_TYPE_VIBRATION 4  // 振动信号

// 算法类型常量定义（与头文件注释对应）
#define ALGORITHM_NONE 0         // 不处理
#define ALGORITHM_MOVING_AVG 1   // 滑动平均滤波
#define ALGORITHM_MEDIAN 2       // 中值滤波
#define ALGORITHM_CLIP 3         // 限幅滤波
#define ALGORITHM_NORMALIZE 4    // 归一化处理

/*------------------------  Interface Declaration Begin  --------------------------*/

// 信号预处理核心接口
// 输入：PreprocessInput结构体指针
// 输出：PreprocessOutput结构体指针
// 返回：处理结果状态码（PREPROCESS_*）
int preprocessSignal(PreprocessInput *input, PreprocessOutput *output);



/*------------------------  Interface Declaration End  --------------------------*/

#endif // _atomic_0822_signal_preprocessing_service_H_
